package com.hera.process.config.rest.controller;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.hera.base.domain.MensajeJSON;
import com.hera.base.rest.controller.BaseController;
import com.hera.base.util.FiltroDTO;
import com.hera.process.config.service.SecGroupModuleService;
import com.hera.process.config.service.SecurityGroupService;
import com.hera.process.config.service.SysUserService;
import com.hera.process.config.service.UserService;
import com.hera.process.security.domain.SecGroupModule;
import com.hera.process.security.domain.SecurityGroup;
import com.hera.process.security.domain.User;

@Controller
@RequestMapping("security")
public class SecurityController extends BaseController {

	static final Logger logger = Logger.getLogger(SecurityController.class);
	
	@Autowired
	private SysUserService sysuserservice;
	
	@Autowired
	private UserService userService;
	
	@Autowired
	private SecurityGroupService securitygroup1;
	
	@Autowired
	private SecGroupModuleService secgroupmodule;
	
	/*
	 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	 /////////////////////////////////////////////// USUARIO SERVICE //////////////////////////////////////////////////////////////////////////////////
	 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	 */
		
		@RequestMapping(value = "sysuser/list", method = RequestMethod.POST)
	    @ResponseBody
	    public MensajeJSON listUsers(@RequestBody FiltroDTO filtroDTO) {
			logger.info("listUsers  " + filtroDTO.toString());
			
			return obtenerMensajeJSON(sysuserservice.findAll(filtroDTO));
	    }

		@RequestMapping(value = "sysuser/save", method = RequestMethod.POST)
	    @ResponseBody
	    public MensajeJSON saveUser(@RequestBody User user) {
			logger.info("grabando el parametro....");
			sysuserservice.save(user);
			return obtenerMensajeJSON(user);		
	    }
		
		@RequestMapping(value = "sysuser/update", method = RequestMethod.POST)
	    @ResponseBody
	    public MensajeJSON updateUser(@RequestBody User user) {
			logger.info("grabando el parametro....");
			sysuserservice.update(user);
			return obtenerMensajeJSON(user);		
	    }
		
		@RequestMapping(value = "sysuser/delete", method = RequestMethod.POST)
	    @ResponseBody
	    public MensajeJSON deleteUser(@RequestBody User user) {
			logger.info("grabando el parametro....");
			sysuserservice.delete(user);
			return obtenerMensajeJSON(user);		
	    }
		
		@RequestMapping(value = "sysuser/validarUsuario", method = RequestMethod.POST)
	    @ResponseBody
	    public MensajeJSON validateUser(@RequestBody User user) {
			logger.info("grabando el parametro....");
			user = sysuserservice.validarUsuario(user);
			return obtenerMensajeJSON(user);		
	    }	
		/*
		 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		 /////////////////////////////////////////////// SECURITYGROUP SERVICE ////////////////////////////////////////////////////////////////////////////
		 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		 */
		
		
		@RequestMapping(value = "securitygroup/list", method = RequestMethod.POST)
	    @ResponseBody
	    public MensajeJSON listAddSecurityGroups(@RequestBody FiltroDTO filtroDTO) {
			logger.info("listSecuences  " + filtroDTO.toString());
			
			return obtenerMensajeJSON(securitygroup1.findAll(filtroDTO));
	    }
		
		@RequestMapping(value = "securitygroup/save", method = RequestMethod.POST)
	    @ResponseBody
	    public MensajeJSON saveAddSecurityGroup(@RequestBody SecurityGroup securitygroup) {
			logger.info("grabando el parametro....");
			securitygroup1.save(securitygroup);
			return obtenerMensajeJSON(securitygroup);		
	    }
		
		@RequestMapping(value = "securitygroup/update", method = RequestMethod.POST)
	    @ResponseBody
	    public MensajeJSON updateAddSecurityGroup(@RequestBody SecurityGroup securitygroup) {
			logger.info("grabando el parametro....");
			securitygroup1.update(securitygroup);
			return obtenerMensajeJSON(securitygroup);
	    }
		
		@RequestMapping(value = "securitygroup/delete", method = RequestMethod.POST)
	    @ResponseBody
	    public MensajeJSON deleteAddSecurityGroup(@RequestBody SecurityGroup securitygroup) {
			logger.info("grabando el parametro....");
			securitygroup1.delete(securitygroup);
			return obtenerMensajeJSON(securitygroup);		
	    }
		
		/*
		 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		 /////////////////////////////////////////////// SECURITYGROUPMODULE SERVICE ////////////////////////////////////////////////////////////////////////////
		 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		 */
		@RequestMapping(value = "secgroupmoduleasigsi/list", method = RequestMethod.POST)
	    @ResponseBody
	    public MensajeJSON listSecGroupModulesSiAsignados(@RequestBody SecurityGroup securityGroup) {
			logger.info("listSecuences  " + securityGroup.toString());
			
			return obtenerMensajeJSON(secgroupmodule.findAllModulosSiasignado(securityGroup));
	    }
		
		@RequestMapping(value = "secgroupmoduleasigno/list", method = RequestMethod.POST)
	    @ResponseBody
	    public MensajeJSON listSecGroupModulesNoAsignados(@RequestBody SecurityGroup securityGroup) {
			logger.info("listSecuences  " + securityGroup.toString());
			
			return obtenerMensajeJSON(secgroupmodule.findAllModulosNoasignado(securityGroup));
	    }
		
		@RequestMapping(value = "secgroupmodule/list", method = RequestMethod.POST)
	    @ResponseBody
	    public MensajeJSON listAddSecGroupModules(@RequestBody FiltroDTO filtroDTO) {
			logger.info("listSecuences  " + filtroDTO.toString());
			
			return obtenerMensajeJSON(secgroupmodule.findAll(filtroDTO));
	    }
		
		@RequestMapping(value = "secgroupmodule/save", method = RequestMethod.POST)
	    @ResponseBody
	    public MensajeJSON saveAddSecGroupModule(@RequestBody SecGroupModule scgmodule) {
			logger.info("grabando el parametro....");
			secgroupmodule.save(scgmodule);
			return obtenerMensajeJSON(scgmodule);		
	    }
		
		@RequestMapping(value = "secgroupmodule/update", method = RequestMethod.POST)
	    @ResponseBody
	    public MensajeJSON updateAddSecGroupModule(@RequestBody SecGroupModule scgmodule) {
			logger.info("grabando el parametro....");
			secgroupmodule.update(scgmodule);
			return obtenerMensajeJSON(scgmodule);
	    }
		
		@RequestMapping(value = "secgroupmodule/delete", method = RequestMethod.POST)
	    @ResponseBody
	    public MensajeJSON deleteAddSecGroupModule(@RequestBody SecGroupModule scgmodule) {
			logger.info("grabando el parametro....");
			secgroupmodule.delete(scgmodule);
			return obtenerMensajeJSON(scgmodule);		
	    }
}
